/*
 * ComandoLogin.java
 *
 * Created on 5 de Janeiro de 2008, 18:09
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package br.uff.javabasico.comandos;

import br.uff.javabasico.DAO.ClienteDAOImpl;
import br.uff.javabasico.DAO.PedidoDAOImpl;
import br.uff.javabasico.exception.BDException;
import br.uff.javabasico.exception.ExcecaoComando;
import br.uff.javabasico.modelos.Cliente;
import br.uff.javabasico.modelos.Pedido;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

/**
 *
 * @author HelioKann
 */
public class ComandoLogin implements Comando{
    
    private boolean admin;
    
    public ComandoLogin(boolean admin) {
        this.admin = admin;
    }
    
    public String executar(HttpServletRequest req) throws ExcecaoComando {
        
        HttpSession sessao = req.getSession();
        
        String login = req.getParameter("txtLogin");
        String senha = req.getParameter("txtSenha");
        String retornoErro = (admin ? "admin/admin.jsp" : "");
        String retorno = (admin ? "admin/administracao.jsp" : "EditarCompra.jsp");
        
        
        
        if(login == null || login.equals("") || senha == null || senha.equals("")){
            req.setAttribute("ERRO", "Login ou senha invalidos");
            return retornoErro;
        }
        
        Cliente cli = null;
        
        try {
            
            cli = ClienteDAOImpl.recuperaUmCliente(login, senha);
        } catch (BDException ex) {
            req.setAttribute("ERRO", "Erro Inexperado, tente mais tarde");
            ex.printStackTrace();
            return retornoErro;
        }
        
        if ( cli == null ){
            req.setAttribute("ERRO", "Login ou senha invalidos");
            return retornoErro;
        }
        
        try {
            Pedido p = PedidoDAOImpl.recuperaAtualComItens(cli);
            if(p == null) {
                p = new Pedido();
                p.setCliente(cli);
                PedidoDAOImpl.incluir(p);
                p = PedidoDAOImpl.recuperaAtualComItens(cli);
            }
            cli.setPedidoAberto(p);
        } catch (BDException ex) {
            req.setAttribute("ERRO", "Erro ao obter a lista de itens pedidos do cliente");
            return retornoErro;
        }
        
        sessao.setAttribute((admin ? "admin" : "cliente"), cli);
        return retorno;
    }
    
}
